(function(w){
    var server=JS_SITE_DOMAIN+"/app/update/update.php",//获取升级描述文件服务器地址
        localDir="update",localFile="update.json",//本地保存升级描述目录和文件名
        keyUpdate="updateCheck",//取消升级键名
        keyAbort="updateAbort",//忽略版本键名
        checkInterval=24*60*60*1000 //升级检查间隔，单位为ms,7天为7*24*60*60*1000=60480000, 如果每次启动需要检查设置值为0
    /**
     * 检测程序升级
     */
    function checkUpdate() {
        // 判断升级检测是否过期
        var lastcheck = plus.storage.getItem( keyUpdate );
        if ( lastcheck ) {
            var dc = parseInt( lastcheck );
            var dn = (new Date()).getTime();
            if ( dn-dc < checkInterval ) {	// 未超过上次升级检测间隔，不需要进行升级检查
                return;
            }
            // 取消已过期，删除取消标记
            plus.storage.removeItem( keyUpdate );
        }
        //从服务器获取升级数据
        getUpdateData();
    }

    /**
     * 检查升级数据
     */
    function checkUpdateData( j ){
        //当前客户端版本号
        var curVer=plus.runtime.version,inf = j[plus.os.name];
        if ( inf ){
            var srvVer = inf.version;
            // 判断是否存在忽略版本号
            var vabort = plus.storage.getItem( keyAbort );
            if ( vabort && srvVer==vabort ) {
                // 忽略此版本
                return;
            }
            //alert('当前版本：'+curVer+'升级版本：'+srvVer);
            // 判断是否需要升级
            if ( compareVersion(curVer,srvVer) ) {
                // 提示用户是否升级
                plus.nativeUI.confirm( inf.note, function(i){
                    if ( 0==i.index ) {
					  if('iOS'==plus.os.name){
						 plus.runtime.openURL( inf.url );
					  }else{
						 DownLoadFile(inf.url);
					  }
                    } else if ( 1==i.index ) {
                        plus.storage.setItem( keyAbort, srvVer );
                        plus.storage.setItem( keyUpdate, (new Date()).getTime().toString() );
                    } else {
                        plus.storage.setItem( keyUpdate, (new Date()).getTime().toString() );
                    }
                }, inf.title, ["立即更新","跳过此版本","取　　消"] );
            }
        }
    }

    /**
     * 从服务器获取升级数据；
     */
    function getUpdateData(){
        mui.getJSON(server,{},function (data) {
            //alert('服务器：'+data.appid+'当前app：'+plus.runtime.appid)
            if(data.appid==plus.runtime.appid){
                // 检查升级数据
                checkUpdateData(data);
            }
        });
    }

    /**
     * 比较版本大小，如果新版本nv大于旧版本ov则返回true，否则返回false
     * @param {String} ov
     * @param {String} nv
     * @return {Boolean}
     */
    function compareVersion( ov, nv ){
        if ( !ov || !nv || ov=="" || nv=="" ){
            return false;
        }
        var b=false,
            ova = ov.split(".",4),
            nva = nv.split(".",4);
        for ( var i=0; i<ova.length&&i<nva.length; i++ ) {
            var so=ova[i],no=parseInt(so),sn=nva[i],nn=parseInt(sn);
            if ( nn>no || sn.length>so.length  ) {
                return true;
            } else if ( nn<no ) {
                return false;
            }
        }
        if ( nva.length>ova.length && 0==nv.indexOf(ov) ) {
            return true;
        }
    }
    //下载
    function DownLoadFile(url) {
        var w = plus.nativeUI.showWaiting( "等待中..." );
        var d = plus.downloader.createDownload(url,{}, function(f,s) {
            //document.getElementById("Progress_Button").style.cssText = "display: none;";
                plus.runtime.install(f.filename, {}, function() {
                    w.close();
                    //完成更新向服务器进行通知
                    //FinishUpdate();
                    //plus.runtime.restart();
                });
        }, function() {
            w.close();
            mui.toast("下载失败");
        });
        d.addEventListener("statechanged", function(download, status) {
            if (download.state == 3 && status == 200) {
                var percent = Math.round((download.downloadedSize / download.totalSize) * 100);
                w.setTitle("已下载"+percent + "%");
            } else if (download.state == 4) {}
        }, false);
        d.start();
    }
    mui.plusReady(setTimeout(function(){
        checkUpdate();
    },2000));
})(window);